/////////////////////////////////////////////////////////////////////////////////
//
//
//
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef _LESSON_X_H_
#define _LESSON_X_H_
//
#include <Windows.h>
#include "CommonClass.h"


//
class CGameSprite;         // ������Ļ���
class CNormalFish;         // ��ͨ�㾫��
class CSpecialFish;        // �����㾫�飬�纣��
class CMyFish;             // ��ҿ��ƾ��飬С����

// ���ڴ洢��ָ��Ľṹ������
struct FishList
{
	CGameSprite		*pPtr;
	FishList		*pNext;	// ָ����������һ��
	FishList		*pPrev; // ָ����������һ��
};
/////////////////////////////////////////////////////////////////////////////////
//
// ��Ϸ�ܹ��ࡣ��������Ϸ��ѭ������Ϸ��ʼ���������ȹ���
class	CGameMain
{
private:


    void HandleKongzhiyu2Collision(const char* szSrcName, const char* szTarName);

    float m_fCreateJianYouTime;  // "jianyou"精灵生成间隔计时
    float m_fCreateJianZuoTime;  // "jianzuo"精灵生成间隔计时
    float m_fJianInterval;      // 箭生成间隔时间

    // 新增私有函数
    void CreateJianYou(float fDeltaTime);  // 生成jianyou精灵
    void CreateJianZuo(float fDeltaTime);  // 生成jianzuo精灵

    CGameSprite* m_pMyFish2;  // 新增：第二个控制鱼

    // ������Ա����
    bool m_bNeedReinit;  // ����Ƿ���Ҫ���³�ʼ��

    // ����������
    float m_fCreatePowerUpTime;  // �������ɼ�ʱ��
    float m_fSpeedUpTime;        // ����ʣ��ʱ��
    float m_fGodModeTime;        // �޵�ʣ��ʱ��
    bool m_bIsGodMode;           // �Ƿ��޵�״̬




	int				m_iGameState;				// ��Ϸ״̬��0���������ߵȴ���ʼ��1����ʼ����2����Ϸ������
	//CSprite *yellowfish;
	float	m_fCreateNormalTime;		// ������ͨ���ʱ����
	float	m_fCreateSpecialTime;		// �����������ʱ����

	float	m_fWorldLeft;				// ����߽�
	float	m_fWorldRight;
	float	m_fWorldTop;
	float	m_fWorldBottom;

	CSound* bgSound  ;       //���ֲ���

	FishList	*m_pFishHeader;		// װ�����о���(��)������ͷ
	CGameSprite		*m_pMyFish;			// ���ǿ��Ƶ���

	CTextSprite	*m_pLevelText;			// ��ʾ�ȼ�������
	CTextSprite	*m_pHPText;				// ��ʾHP������
	CSprite		*m_pBeginSprite;			// ��ʾ��ʼ��Ϸ������ͼƬ
	CSprite		*m_pBeginSpritePlus;			// ��ʾ��ʼ��Ϸ�Ĵ�������ͼƬ
	CSprite		*m_pJieShuSprite;			// ��ʾ��Ϸ����������ͼƬ


public:
	CGameMain();            //���캯��
	~CGameMain();           //��������


	// ����������߷�������
    bool IsGodMode() const { return m_bIsGodMode; }
    void CreatePowerUps(float fDeltaTime);
    void UpdatePowerUpEffects(float fDeltaTime);
    void HandlePowerUpCollision(const char* szSrcName, const char* szTarName);





    // �޸ĵ�ͼ�л���������
    void ChangeMap(const char* szMapName);
    // ������ʼ����鷽��
    void CheckReinitialize();
    // �����������ڴ�����ͼ�л����
    void HandleMapChangeClick(const float fMouseX, const float fMouseY);
    // ��������
     void ResetUIState();  // ר����������UI״̬






	// Get����
	int				GetGameState()											{ return m_iGameState; }
    float	GetCreateNormalTime(){ return m_fCreateNormalTime; }
	float	GetCreateSpecialTime(){ return m_fCreateSpecialTime; }

	float	GetWorldLeft(){ return m_fWorldLeft; }
	float	GetWorldRight(){ return m_fWorldRight; }
	float	GetWorldTop(){ return m_fWorldTop; }
	float	GetWorldBottom(){ return m_fWorldBottom; }

	CGameSprite		*GetControlFish(){ return m_pMyFish; }
	const char		*GetControlFishName();
	// Set����
	void			SetGameState( const int iState )				{ m_iGameState	=	iState; }
    void	SetCreateNormalTime( const float fTime ){ m_fCreateNormalTime = fTime; }
	void	SetCreateSpecialTime( const float fTime ){ m_fCreateSpecialTime = fTime; }

	void	SetControlFish( CGameSprite *pFish ){ m_pMyFish	=	pFish; }
	// ��Ϸ��ѭ����
	void			GameMainLoop( float	fDeltaTime );
	void			GameInit();
	void			GameRun( float fDeltaTime );
	void			GameEnd();
	void 			OnMouseMove( const float fMouseX, const float fMouseY );
	void 			OnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY );
	void 			OnMouseUp( const int iMouseType, const float fMouseX, const float fMouseY );
	void 			OnKeyDown( const int iKey, const bool bAltPress, const bool bShiftPress, const bool bCtrlPress );
	void 			OnKeyUp( const int iKey );
	void 			OnSpriteColSprite( const char *szSrcName, const char *szTarName );
	void 			OnSpriteColWorldLimit( const char *szName, const int iColSide );
	// �жϣ������Ƶ���ﵽ4����ʱ����Ϸʤ��. �ȼ���Ϊ0��ʱ����Ϸʧ��
	bool	IsGameWin();
	bool	IsGameLost();
	// ������������
	CGameSprite		*GetFishFromName( const char *szName );
	void	AddFish( CGameSprite *pSprite );
	void	DeleteFishFromName( const char *szName );
	void	DeleteAllFish();
};

/////////////////////////////////////////////////////////////////////////////////
//
// ������Ļ���
class CGameSprite : public CSprite
{
public:
	CGameSprite( const char *szName ) : CSprite( szName ){}//���캯��
	~CGameSprite(){}; //��������
	// ��̬Count
	static	int	m_iCreatedFishCount;

	// Get
	int	GetLevel(){ return m_iLevel;}	// ��ȡ���鼶��
	int	GetHp(){ return m_iHp;} // ��ȡ��������ֵ

	// Set
	void  SetLevel( const int iLevel ){ m_iLevel = iLevel; }  // ���þ��鼶��
	void  SetHp( const int iHp ){ m_iHp	=	iHp; } // ���þ�������ֵ

	// 虚函数
	virtual	void	OnColControlFish( CMyFish *pMyFish ){}
	virtual void	OnMove(bool bKeyDown,int iKey){}
protected:
	int	m_iHp;	// Health Point ����ֵ
	int	m_iLevel;  // �ȼ�(��ҿ��Ƶ�����������������������������ǳ�ʼ��ʱ��͸��˹̶��ĵȼ�ֵ)
};


// ��ҿ��Ƶ���
class CMyFish : public CGameSprite
{
public:
	CMyFish(const char *szName,const int iHp, const int iLevel); //���캯��
	virtual ~CMyFish(); //��������
public:
	void OnMove(bool bKeyDown,int iKey); //���̿��ƺ����������жϲ����ݽ���iKeyֵ�������������ƶ�

private:
	float			m_fVelocityLeft;			// ���Ƶ�������������ζ��ٶ�
	float			m_fVelocityRight;
	float			m_fVelocityUp;
	float			m_fVelocityDown;

};

// 在CMyFish类下方添加新类
class CMyFish2 : public CGameSprite
{
public:
    CMyFish2(const char *szName, const int iHp, const int iLevel);
    virtual ~CMyFish2();

    void OnMove(bool bKeyDown, int iKey); // 控制移动函数

private:
    float m_fVelocityLeft;    // 左移速度
    float m_fVelocityRight;   // 右移速度
    float m_fVelocityUp;      // 上移速度
    float m_fVelocityDown;    // 下移速度
};




// ��ͨ���͵��㣬�еȼ�����
//���ǿ��Ƶ�������ȼ����ڵ��ڴ��㣬����ԳԵ��䣬���С�ڣ��򱻳Ե�
class CNormalFish : public CGameSprite
{
public:
	CNormalFish( const char *szName, const int iHp, const int iLevel ); //���캯��
	~CNormalFish(){} //��������

	// �����������͵������ײ����
	void		OnColControlFish( CMyFish *pMyFish );
};



// ���������
// ��ҿ��Ƶ��㣬ֻҪ�����������㣬��Ȼ�Ǳ���HP�������ý��еȼ��жϡ���ȥ��HPֵ������CSpecialFish������HP��С
class CSpecialFish : public CGameSprite
{
public:
	CSpecialFish( const char *szName, const int iHp );
	~CSpecialFish() {}

	// �̳��麯���������������͵������ײ����
	void		OnColControlFish( CMyFish *pMyFish );
};

/////////////////////////////////////////////////////////////////////////////////
//
extern CGameMain	g_GameMain;

#endif // _LESSON_X_H_
